﻿using GDM.Hogar.Entidades;
using GDM.Hogar.Repositorios.Contratos;
using GDM.Hogar.Repositorios.Core;
using GDM.Hogar.Repositorios.Soporte;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;

namespace GDM.Hogar.Repositorios
{
    public class ParteQuincenalPersonalRepositorio : Repositorio, IParteQuincenalPersonalRepositorio
    {
        public ParteQuincenalPersonalRepositorio(IDbManager dbManager)
            : base(dbManager)
        {
        }

        protected override string ProcActualizar
        {
            get
            {
                return ProcedimientosAlmacenados.ParteQuincenalPersonal.Actualizar;
            }
        }

        public void ActualizarParteQuincenalPersonal(string parteQuincenalPersonal)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@ParteQuincenalPersonalAsXml", DbType.Xml, ParameterDirection.Input, parteQuincenalPersonal));
            Actualizar(parametros);
        }

        public void GuardarParteQuincenalPersonal(string parteQuincenalPersonal)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@ParteQuincenalPersonalAsXml", DbType.Xml, ParameterDirection.Input, parteQuincenalPersonal));
            EjecutarConsulta(ProcedimientosAlmacenados.ParteQuincenalPersonal.Insertar, parametros);
        }

        public ParteDiarioPersonal ObtenerParteQuincenalPersonal(DateTime fecha)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@Fecha", DbType.Date, ParameterDirection.Input, fecha));
            return Obtener<ParteDiarioPersonal>(ProcedimientosAlmacenados.ParteQuincenalPersonal.ObtenerPorFecha, parametros).FirstOrDefault();
        }

        public IList<ParteDiarioPersonal> ObtenerParteQuincenalPersonal(int año, int mes, int quincena, int agenteId)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@Mes", DbType.Int64, ParameterDirection.Input, mes));
            parametros.Add(CrearParametro("@Año", DbType.Int64, ParameterDirection.Input, año));
            parametros.Add(CrearParametro("@Quincena", DbType.Int64, ParameterDirection.Input, quincena));
            parametros.Add(CrearParametro("@AgenteId", DbType.Int64, ParameterDirection.Input, agenteId));
            return Obtener<ParteDiarioPersonal>(ProcedimientosAlmacenados.ParteQuincenalPersonal.ObtenerPorMesQuincenaAgente, parametros);
        }

        public ParteDiarioPersonal ObtenerParteQuincenalPersonal(int parteQuincenalPersonalId)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@ParteQuincenalPersonalId", DbType.Int64, ParameterDirection.Input, parteQuincenalPersonalId));
            return Obtener<ParteDiarioPersonal>(ProcedimientosAlmacenados.ParteQuincenalPersonal.Obtener, parametros).FirstOrDefault();
        }

        public IList<ConsultaParteQuincenalPersonal> ObtenerTodosPorMesQuincena(int mes, int año, int quincena)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@Mes", DbType.Int64, ParameterDirection.Input, mes));
            parametros.Add(CrearParametro("@Año", DbType.Int64, ParameterDirection.Input, año));
            parametros.Add(CrearParametro("@Quincena", DbType.Int64, ParameterDirection.Input, quincena));
            return Obtener<ConsultaParteQuincenalPersonal>(ProcedimientosAlmacenados.ParteQuincenalPersonal.ObtenerPorMesQuincena, parametros);
        }

        public void ActivarParteDiarioPersonal(int parteDiarioPersonalId, bool activo)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@parteDiarioPersonalId", DbType.Int64, ParameterDirection.Input, parteDiarioPersonalId));
            parametros.Add(CrearParametro("@Activo", DbType.Boolean, ParameterDirection.Input, activo));
            EjecutarConsulta(ProcedimientosAlmacenados.ParteQuincenalPersonal.Activar, parametros);
        }
    }
}